
import 'dart:convert';

import 'package:cloudapp/esdk/model/server_info.dart';
import 'package:cloudapp/esdk/response/user_login_response.dart';
import 'package:flutter/foundation.dart';

/// [SessionInfo] 服务器会话信息
/// APP 或 客户端 可以连接到不同的服务器
/// 连接到不同的服务器，应有完全不同的数据展示
/// 会话模型： 使用某个用户ID，连接到某个服务器，为一个会话；本地缓存的同步文件数据应关联会话
/// 所以 userId 与 serverHash 应联合唯一
/// [SessionInfo.id] 数据库唯一ID，自增 做为会话标识符，与其他表关联
/// [SessionInfo.serverHash] 服务器标识符，UUID格式
/// [SessionInfo.lastUsed] 上次使用时的时间戳
class SessionInfo {
  final int id;
  final int userId;
  final int serverId;
  final int lastUsed;
  final String loginResponse;

  SessionInfo({
    @required this.id,
    @required this.userId,
    @required this.serverId,
    @required this.lastUsed,
    @required this.loginResponse
  });

  UserLoginResponse get userInfo {
    return UserLoginResponse.fromJson(jsonDecode(loginResponse));
  }

  ServerInfo get serverInfo {
    return null;
  }
}

/*
create table session_info (
  id integer primary key,
  userId integer,
  serverId integer,
  lastUsed integer,
  loginResponse text
)
 */

/*
逻辑梳理
1. 用户以 U1 登录到 S1
  1. 若无记录，新增
  2. 若有记录，使用 但无效？
2. 用户以 U2 再次登录到 S1，原无记录，新增
3. 用户以 U1 再次登录到 S2，原无记录，新增


用户第一次启动，读取数据库 sessionInfo 无记录，入登录界面，服务器下拉框无记录；
  用户点击发现扫二维码，请求服务器基本信息，列入下拉框；用户登录成功后，将用户ID与服务器hash入会话表

用户退出后再次启动，读取session 表，取出 loginResponse ，进入主界面；

若进入主界面请求时 401 则退回登录界面，读取session 表，有一条记录，填充下拉框；
  登录成功后，更新 session 表记录；
  若用户不同，则新增记录；

用户点击注销 退回登录界面，下拉框 点击 发现服务器，进入扫二维码
  若扫出结果在原下拉框里，则维持；
  若扫出结果不在，则新增session 表记录，下拉框加值 并使之为选中；

用户在登录界面中，可以点击删除某个服务器，则？
*/
